<template>
  <div id="app">
      
    <main-tabbar></main-tabbar>

    <router-view></router-view>
    <br>

    <hr>
    <!-- $store -->

    <button @click="touchStateResponse">
      没有在state中初始化的值，增加新属性触发响应式
    </button>
    <h3>{{$store.state.userInfo}}</h3>
    <hr>
    <button @click="incCounter">
      递增
    </button>
    <button @click="decCounter">
      递减
    </button>

    <button @click="incCounterN(2)">
      递增N(mutations传参)
    </button>
    <button @click="decCounterN(2)">
      递减N(mutations传参)
    </button>

<hr>

<button @click="addStu">增加学生</button>
    <h3>
      $store.counter:
      {{$store.state.counter}}
    </h3>
    <h3>
      $store.counter平方:
      {{$store.getters.powerCounter}}
    </h3>

  <h2>获取$store 中年龄大约20的，共计：{{$store.getters.stuGreaterLength}}个</h2>
    <ul>
      <li  v-for="(item,index) in $store.getters.stuGreater" :key="item.id">
       {{index}} => 姓名：{{item.name}} 年龄:{{item.age}}
      </li>
    </ul>
  <br>

     <h2>获取$store 中年龄大约20的，共计：{{$store.getters.stuGreaterLength}}个</h2>
    <ul>
      <li  v-for="(item,index) in $store.getters.stuGreaterN(2)" :key="item.id">
        {{index}} =>姓名：{{item.name}} 年龄:{{item.age}}
      </li>
    </ul>
    <hr>
    <button @click="aSyncEditUserInfo">
      store修改值增加异步操作
    </button>
    <hr>

  </div>
</template>

<script>
// 这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
// import PageHeaderLayout from '@/layouts/PageHeaderLayout'
// import ApeDrawer from '@/components/ApeDrawer'
// import { mapGetters } from 'vuex'

import MainTabbar from '@/common/components/MainTabbar.vue'

// 引入 store mutations常量
import {
  INCCOUNTER
} from '@/store/mutations-types.js'

export default {
  name: '',
  components: {
    //PageHeaderLayout,
    MainTabbar
    
  },
  // 定义属性
  data() {
    return {
      // stuGreater:this.$store.getters.stuGreater
    }
  },
  // 计算属性，会监听依赖属性值随之变化
  computed: {
  },
  // 监控data中的数据变化
  watch: {},
  // 方法集合
  methods: {
    incCounter(){
      this.$store.commit(INCCOUNTER)
    },
    decCounter(){
      this.$store.commit('decCounter')
    },
    incCounterN(count){
      // 修改store数据传参
      this.$store.commit('incCounterN',count)
    },
    decCounterN(count){
      this.$store.commit('decCounter',count)
    },
    addStu(){
      let stu = {id:1123,name:'张扬',age:44}
      // 1.普通提交分割
      // this.$store.commit('事件类型',参数)
      // this.$store.commit('addStu',stu)
      // 2.特殊提交风格 (事件类型，payload载荷：携带参数，事件addStu接受个对象，不是单个参数)
      this.$store.commit({
        type:'addStu',
        stu  // stu:stu
      })
    },
    touchStateResponse(){
     
      this.$store.commit({
        type:'userInfoAddProp'
      })


    },
    //  写法1 回调函数 ： 调用 store异步操作 传参返回并确认已修改
    // aSyncEditUserInfo(){
    //   this.$store.dispatch('aUpdateInfo',{
    //     message:'我是payload',
    //     success: ()=>{
    //       console.log('异步操作已完成');
          
    //     }
    //   })
    // 
    
    //  写法2  使用 promise 返回promise对象后 .then ： 调用 store异步操作 传参返回并确认已修改
    aSyncEditUserInfo(){
      this.$store.dispatch('aUpdateInfo','我是payload，携带信息').then(res => {
        console.log('promise：resolve返回值：',res);
        console.log('调用 store异步操作结束');
      });
    },




  },
  // 生命周期 - 创建完成（可以访问当前this实例）
  created() {
    
  },
  // 生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {
    
  },
  beforeCreate() {}, // 生命周期 - 创建之前
  beforeMount() {}, // 生命周期 - 挂载之前
  beforeUpdate() {}, // 生命周期 - 更新之前
  updated() {}, // 生命周期 - 更新之后
  beforeDestroy() {}, // 生命周期 - 销毁之前
  destroyed() {}, // 生命周期 - 销毁完成
  activated() {}, // 如果页面有keep-alive缓存功能，这个函数会触发
}
</script>

<style lang='scss' scoped>
  
</style>